package com.solution.wx.my.service.impl;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.solution.admin.product.entity.ProductEntity;
import com.solution.common.dao.BaseDao;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;
import com.solution.common.service.impl.BaseServiceImpl;
import com.solution.wx.my.dao.UserFavoriteDao;
import com.solution.wx.my.entity.UserFavoriteEntity;
import com.solution.wx.my.service.UserFavoriteService;

/**
 * 商品收藏信息service实现层
 * 
 * @author xu_cc
 * @date 2017-11-20 11:32:37
 */
@Service
public class UserFavoriteServiceImpl extends BaseServiceImpl<UserFavoriteEntity> implements UserFavoriteService {

    /**
     * 商品收藏信息接口
     */
    @Autowired
    private UserFavoriteDao userFavoriteDao;

    protected BaseDao<UserFavoriteEntity> getDao() {
        return this.userFavoriteDao;
    }

    /**
     * 保存商品收藏信息
     * 
     * @param userFavoriteEntity
     *            商品收藏信息实体
     * @return Long 添加成功商品收藏信息的ID
     * @author xu_cc
     * @date 2017-11-20 11:32:37
     */
    public long saveUserFavorite(UserFavoriteEntity userFavoriteEntity) {
        return userFavoriteDao.saveUserFavorite(userFavoriteEntity);
    }

    /**
     * 分页查询商品收藏信息
     * 
     * @param pageParam
     *            分页参数
     * @param paramMap
     *            查询参数
     * @return PageBean 分页参数和分页数据
     * @author xu_cc
     * @date 2017-11-20 11:32:37
     */
    @Override
    public PageBean listUserFavoritePage(PageParam pageParam, Map<String, Object> paramMap) {
        return userFavoriteDao.listUserFavoritePage(pageParam, paramMap);
    }

    /**
     * 根据ID查询用户信息
     * 
     * @param id
     *            用户id
     * @return userFavoriteEntity 用户对象
     * @author xu_cc
     * @date 2017-11-20 11:32:37
     */
    public UserFavoriteEntity getUserFavoriteById(Long id) {
        return userFavoriteDao.getById(id.longValue());
    }

    /**
     * 更新用户
     * 
     * @param userFavoriteEntity
     *            用户实体
     * @return Long 更新是否成功，>1代表更新成功
     * @author xu_cc
     * @date 2017-11-20 11:32:37
     */
    @Override
    public int updateUserFavorite(UserFavoriteEntity userFavoriteEntity) {
        return userFavoriteDao.updateUserFavorite(userFavoriteEntity);
    }

    /**
     * 根据条件查询商品收藏信息
     * 
     * @param param
     * @return 数据列表
     * @author xu_cc
     * @date 2017-11-20 11:32:37
     */
    @Override
    public List<UserFavoriteEntity> listUserFavorite(Map<String, Object> param) {
        return userFavoriteDao.listUserFavorite(param);
    }

    /**
     * 删除商品收藏信息
     * 
     * @param
     * @return int 返回删除记录条数
     * @author xu_cc
     * @date 2017-11-20 11:32:37
     */
    public int deleteUserFavoriteById(long id) {
        return userFavoriteDao.deleteById(id);
    }

    /**
     * 验证是否收藏 userCode:[用户编码]<br>
     * productId:[商品ID]<br>
     * productSpecCompositionId:[规格id，可为空]<br>
     * 
     * @param param
     * @return Long
     * @author xu_cc
     * @throws Exception
     *             exception
     * @Date 创建时间：2017年11月20日 下午3:01:14
     */
    public Long getCountByUserCodeAndProductId(String userCode, Long productId, Long productSpecCompositionId) {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("userCode", userCode);
        param.put("productId", productId);
        param.put("productSpecCompositionId", productSpecCompositionId);
        return userFavoriteDao.getCountByUserCodeAndProductId(param);
    }

	/**
	 * 格式化商品价格
	 * @param productList
	 */
    public void formatProductPrice(List<ProductEntity> productList){
		// 初始化价格显示
		DecimalFormat df = new DecimalFormat("#.00");
		if(productList != null && productList.size() > 0){
			for (ProductEntity product : productList) {
				if(product.getProductPrice() != null){
					String[] prices = df.format(product.getProductPrice()).split("\\.");
					product.setProductPriceInteger(prices[0]);
					product.setProductPriceDecimal(prices[1]);
				}
			}
		}
	}
}
